/**
 * Created by zhulizhe on 2017/8/30.
 */

// import Store from 'react-native-store';
import Contant from "../Contant";
import  {DeviceEventEmitter,AsyncStorage} from 'react-native';
import Storage from 'react-native-storage'
var storage = new Storage({
    // 最大容量，默认值1000条数据循环存储
    size: 1000,

    // 存储引擎：对于RN使用AsyncStorage，对于web使用window.localStorage
    // 如果不指定则数据只会保存在内存中，重启后即丢失
    storageBackend: AsyncStorage,

    // 数据过期时间，默认一整天（1000 * 3600 * 24 毫秒），设为null则永不过期
    defaultExpires: null,

    // 读写时在内存中缓存数据。默认启用。
    enableCache: true,
})
global.storage = storage;


const User = 'User' ;

// 登录后的信息存储
class LoginStore{

    // 获取登陆状态
    loginState(){
        return new Promise((resolve)=>{
            storage.load({
                key: User,
                // autoSync(默认为true)意味着在没有找到数据或数据过期时自动调用相应的sync方法
                autoSync: true,
                // syncInBackground(默认为true)意味着如果数据过期，
                // 在调用sync方法的同时先返回已经过期的数据。
                // 设置为false的话，则等待sync方法提供的最新数据(当然会需要更多时间)。
                syncInBackground: false,

            }).then(ret=>{
                resolve(true) ;
            }).catch(err=>{
                resolve(false);
            })
        })
    }

    // 获取用户信息
    user(){
        return new Promise(function(resolve){
            storage.load({
                key: User,
                // autoSync(默认为true)意味着在没有找到数据或数据过期时自动调用相应的sync方法
                autoSync: true,
                // syncInBackground(默认为true)意味着如果数据过期，
                // 在调用sync方法的同时先返回已经过期的数据。
                // 设置为false的话，则等待sync方法提供的最新数据(当然会需要更多时间)。
                syncInBackground: true,

            }).then(ret=>{
                resolve(ret) ;
            }).catch(err=>{
                resolve(null);
            })
        });
    }

    // 保存
    save(username,access_token,access_secret){
        storage.clearMapForKey(User);
        storage.save({
            key: User,  // 注意:请不要在key中使用_下划线符号!
            data: {
                username: username,
                access_token: access_token,
                access_token_secret: access_secret,
                login:true
            },

            // 如果不指定过期时间，则会使用defaultExpires参数
            // 如果设为null，则永不过期
            expires: null
        });
    }

    //清除用户信息
    loginOut(){
        DeviceEventEmitter.emit(Contant.LOGINOUT);
    }
}
const loginStore = new LoginStore() ;
module.exports = loginStore ;


